package com.example.summary.sort;

import com.alibaba.fastjson.JSONObject;

import java.util.*;

/**
 * Created by wzn on 2019/4/19.
 */
public class LuoXuanDaYing {

    public static void main(String[] args) {
        /**
         * 1
         * 2
         */
        int[][] a = {{1}, {2}, {3}};
        /**
         * 1,2
         */
        int[][] b = {{1, 2, 3}};
        /**
         * 1,2
         * 3,4
         */
        int[][] c = {{1, 2}, {3, 4}};
        /**
         * 1,2,3
         * 4,5,6
         * 7,8,9
         */
        int[][] d = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        /**
         * 1,2,3
         * 4,5,6
         * 7,8,9
         * 10,11,12
         */
        int[][] e = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}, {13, 14, 15}};
        /**
         * 1, 2, 3, 4
         * 5, 6, 7, 8
         * 9, 10, 11, 12
         * 13, 14, 15, 16
         */
        int[][] f = {{1, 2, 3, 4, 5}, {6, 7, 8, 9, 10}, {11, 12, 13, 14, 15}, {1, 16}};

        /**
         * 1
         * 2
         */
        int[][] g = {{1}};
        System.out.println(JSONObject.toJSONString(print(g)));
    }


    private static List<Integer> print(int[][] arr) {
        List<Integer> list = new ArrayList<>();

        if (null == arr || arr.length == 0) {
            return Collections.emptyList();
        }

        /**
         * 打完几圈
         */
        int index = 0;
        //长
        int x = arr[0].length;
        //高
        int y = arr.length;

        /**
         * 还剩下数据
         */
        while (x * y > 0) {

            if (x * y == 1) {
                list.add(arr[index + x - 1][index + y - 1]);
                return list;
            }

            /**
             * 长→，如果是1,2,3,4 长就是1,2,3
             */
            for (int z = 0; z < (y - 1 == 0 ? x : x - 1); z++) {
                list.add(arr[index][index + z]);
            }

            /**
             * 高↓4,5,6,7 就是5,6,7
             */
            for (int z = 0; z < (x - 1 == 0 ? y : y - 1); z++) {
                list.add(arr[index + z][index + x - 1]);
            }

            if (y > 1) {
                /**
                 * 长←如果是1,2,3,4 长就是4,3,2
                 */
                for (int z = x - 1; z > 0; z--) {
                    list.add(arr[index + y - 1][index + z]);
                }
            }

            if (x > 1) {
                /**
                 * 高↑如果是1,2,3,4 长就是4,3,2
                 */
                for (int z = y - 1; z > 0; z--) {
                    list.add(arr[index + z][index]);
                }
            }

            /**
             * 当前循环次数
             */
            index++;
            /**
             * 剩下的长高
             */
            x = x - 2;
            y = y - 2;
        }

        return list;
    }
}
